<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN">
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Legacy remote API</title>
<link rel="stylesheet" type="text/css" href="../style.css">
</head>

<body>

<div align="center">
<table class=allEncompassingTable >
 <tr>
  <td >
<p><a href="../index.html" TARGET="_top"><img src="images/homeImg.png"></a></p>



<h1>Legacy remote API</h1>

<p class=warningBox>The legacy remote API, or just <em>remote API</em>, should not be mixed-up with the <a href="b0RemoteApiOverview.htm">B&Oslash;-based remote API</a>, which is a newer version of the remote API that is more flexible, easier to use and most importantly, much simpler to extend.</p>

<p>The remote API is part of the <a href="apisOverview.htm">CoppeliaSim API framework</a>.</p>

<p>The  remote API allows to control a simulation (or the simulator itself) from an external application or a remote hardware (e.g. real robot, remote computer, etc.). The CoppeliaSim remote API is composed by <a href="remoteApiFunctionListAlphabetical.htm">approximately one hundred specific functions</a> and <a href="remoteApiFunctions.htm#simxCallScriptFunction">one generic function</a>, that can be called from a C/C++ application, a Python script, a Java application, a Matlab/Octave program, or a Lua script. The remote API functions are interacting with CoppeliaSim via socket communication (or, optionally, via shared memory). All this happens in a hidden fashion to the user. The remote API can let one or several external applications interact with CoppeliaSim in a synchronous* or asynchronous* way (asynchronous by default), and even remote control of the simulator is supported (e.g. remotely loading a scene, starting, pausing or stopping a simulation for instance).</p>

<p class=warningBox>The word <em><strong>Synchronous</strong></em> is used in the sense that each simulation pass runs synchronously with the remote API application (i.e. the simulator will wait for a trigger signal from a client to start next simulation pass at a time t+dt). This is different from synchronous/asynchronous in the sense of <em>blocking/non-blocking operation</em>. The remote API also supports blocking and non-blocking operations.<br>
</p>


<p>Make sure you understand how the remote API is operating by reading <a href="remoteApiModusOperandi.htm">this section</a>. Also have a look at the <a href="externalControllerTutorial.htm">external controller tutorial</a>.</p>

<p>The remote API functionality comes in 2 separate entities, that are interacting via socket communication:</p>

<li><strong>the client side (i.e. your application)</strong>: the remote API on the client side is available for many different programming languages. Currently following languages are supported: <a href="remoteApiFunctions.htm">C/C++</a>, <a href="remoteApiFunctionsPython.htm">Python</a>, <a href="remoteApiFunctionsJava.htm">Java</a>, <a href="remoteApiFunctionsMatlab.htm">Matlab</a>, <a href="remoteApiFunctionsOctave.htm">Octave</a> and <a href="remoteApiFunctionsLua.htm">Lua</a>. Bindings for other languages can easily be created by yourself. <a href="remoteApiClientSide.htm">Instructions on how to enable the remote API on the client side are given here</a>.</li>
<li><strong>the server side (i.e. CoppeliaSim)</strong>: the remote API on the server side is implemented via a CoppeliaSim plugin that is loaded by CoppeliaSim by default: simExtRemoteApi.dll, libsimExtRemoteApi.dylib or libsimExtRemoteApi.so. The plugin project files are located <a href="https://github.com/CoppeliaRobotics/simExtRemoteApi" target="_blank">here</a>. <a href="remoteApiServerSide.htm">Instructions on how to enabled the remote API on the server side are given here</a>.</li>

<br>
<br>
 </tr>
</table> 
</div>  
  
  
</body>

</html>